>I'm hitting an ASSERT in alloc_monitor_pagetable() with debug=y and I
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 1 Nov 2005 18:13:06 +0000 (19:13 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 1 Nov 2005 18:13:06 +0000 (19:13 +0100)
>can reproduce the condition when debug isn't on. The monitor_table is
>not zeroed when entering alloc_monitor_pagetable() - this happens when I
>create a vmx guest. I'm not sure why this happening at first glance.
>File: xen/arch/x86/shadow32.c
>Line: 689
>System: VT/VMX FC3 x86_32 (I can reproduce on FC4 x86_64 too)
>ASSERT(pagetable_get_paddr(v->arch.monitor_table) == 0);

Solution:
What happens is that the monitor page table is not zeroed out
during the initial setup for VMX guests.  As a result, at a later
time when we enable shadow mode for these VMX guests, we trip on
the ASSERT problem above.  To fix this, we just need to initialize
the monitor page table to 0 before calling vmx_final_setup_guest()
and enabling shadow mode.

xen/arch/x86/domain.c

index 2161d8a5a00c8b5e3e94866efc1409af524320cd..a2d5d9b657bd6d57ded11f33358a964c8783c200 100644 (file)
@@ -408,6 +408,9 @@ int arch_set_info_guest(
         if ( !pagetable_get_paddr(d->arch.phys_table) )
             d->arch.phys_table = v->arch.guest_table;
 
+        /* Initialize monitor page table */
+        v->arch.monitor_table = mk_pagetable(0);
+
         vmx_final_setup_guest(v);
     }